{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  CNN做MNIST分类\n",
    "refer: https://github.com/hjptriplebee/AlexNet_with_tensorflow/blob/master/alexnet.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "\n",
    "# 设置按需使用GPU\n",
    "config = tf.ConfigProto()\n",
    "config.gpu_options.allow_growth = True\n",
    "sess = tf.InteractiveSession(config=config)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.导入数据，用 tensorflow 导入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting MNIST_data/train-images-idx3-ubyte.gz\n",
      "Extracting MNIST_data/train-labels-idx1-ubyte.gz\n",
      "Extracting MNIST_data/t10k-images-idx3-ubyte.gz\n",
      "Extracting MNIST_data/t10k-labels-idx1-ubyte.gz\n",
      "(10000, 10)\n",
      "(55000, 10)\n"
     ]
    }
   ],
   "source": [
    "# 用tensorflow 导入数据\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "mnist = input_data.read_data_sets('MNIST_data', one_hot=True)\n",
    "# 看看咱们样本的数量\n",
    "print mnist.test.labels.shape\n",
    "print mnist.train.labels.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 构建网络"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finished building network.\n"
     ]
    }
   ],
   "source": [
    "# 定义卷积层\n",
    "def conv2d(x, filter_shape, strides_x, strides_y, padding, name):\n",
    "    \"\"\" \n",
    "    Args:\n",
    "        x: 4-D inputs. [batch_size, in_height, in_width, in_channels]\n",
    "        filter_shape: A list of ints.[filter_height, filter_width, in_channels, out_channels]\n",
    "        strides: A list of ints. 1-D tensor of length 4. The stride of the sliding window for each dimension of input.\n",
    "        padding: A string from: \"SAME\", \"VALID\". The type of padding algorithm to use.\n",
    "    Returns:\n",
    "        h_conv:  A 4-D tensor. [batch_size, out_height, out_width, out_channels]. \n",
    "        if padding is 'SAME', then out_height==in_height. \n",
    "        else, out_height = in_height - filter_height + 1.\n",
    "        the same for out_width.\n",
    "    \"\"\"\n",
    "    assert padding in ['SAME', 'VALID']\n",
    "    strides=[1,strides_x, strides_y,1]\n",
    "    with tf.variable_scope(name):\n",
    "        W_conv = tf.get_variable('w', shape=filter_shape)\n",
    "        b_conv = tf.get_variable('b', shape=[filter_shape[-1]])\n",
    "        h_conv = tf.nn.conv2d(x, W_conv, strides=strides, padding=padding)\n",
    "        h_conv_relu = tf.nn.relu(h_conv + b_conv)\n",
    "    return h_conv_relu\n",
    "    \n",
    "\n",
    "def max_pooling(x, k_height, k_width, strides_x, strides_y, padding='SAME'):\n",
    "    \"\"\"max pooling layer.\"\"\"\n",
    "    ksize=[1,k_height, k_width,1]\n",
    "    strides=[1,strides_x, strides_y,1]\n",
    "    h_pool = tf.nn.max_pool(x, ksize, strides, padding)\n",
    "    return h_pool\n",
    "\n",
    "def dropout(x, keep_prob, name=None):\n",
    "    \"\"\"dropout layer\"\"\"\n",
    "    return tf.nn.dropout(x, keep_prob, name=name)\n",
    "\n",
    "def fc(x, in_size, out_size, name, activation=None):\n",
    "    \"\"\"fully-connect\n",
    "    Args:\n",
    "        x: 2-D tensor, [batch_size, in_size]\n",
    "        in_size: the size of input tensor.\n",
    "        out_size: the size of output tensor.\n",
    "        activation: 'relu' or 'sigmoid' or 'tanh'.\n",
    "    Returns:\n",
    "        h_fc: 2-D tensor, [batch_size, out_size].\n",
    "    \"\"\"\n",
    "    if activation is not None:\n",
    "        assert activation in ['relu', 'sigmoid', 'tanh'], 'Wrong activation function.'\n",
    "    with tf.variable_scope(name):\n",
    "        w = tf.get_variable('w', shape = [in_size, out_size], dtype=tf.float32)\n",
    "        b = tf.get_variable('b', [out_size], dtype=tf.float32)\n",
    "        h_fc = tf.nn.xw_plus_b(x, w, b)\n",
    "        if activation == 'relu':\n",
    "            return tf.nn.relu(h_fc)\n",
    "        elif activation == 'tanh':\n",
    "            return tf.nn.tanh(h_fc)\n",
    "        elif activation == 'sigmoid':\n",
    "            return tf.nn.sigmoid(h_fc)\n",
    "        else:\n",
    "            return h_fc\n",
    "\n",
    "with tf.name_scope('inputs'):\n",
    "    X_ = tf.placeholder(tf.float32, [None, 784])\n",
    "    y_ = tf.placeholder(tf.float32, [None, 10])\n",
    "\n",
    "# 把X转为卷积所需要的形式\n",
    "X = tf.reshape(X_, [-1, 28, 28, 1])\n",
    "h_conv1 = conv2d(X, [5, 5, 1, 32], 1, 1, 'SAME', 'conv1')\n",
    "h_pool1 = max_pooling(h_conv1, 2, 2, 2, 2)\n",
    "\n",
    "h_conv2 = conv2d(h_pool1, [5, 5, 32, 64], 1, 1, 'SAME', 'conv2')\n",
    "h_pool2 = max_pooling(h_conv2, 2, 2, 2, 2)\n",
    "\n",
    "# flatten\n",
    "h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])\n",
    "h_fc1 = fc(h_pool2_flat, 7*7*64, 1024, 'fc1', 'relu')\n",
    "\n",
    "# dropout: 输出的维度和h_fc1一样，只是随机部分值被值为零\n",
    "keep_prob = tf.placeholder(tf.float32)\n",
    "h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)\n",
    "h_fc2 = fc(h_fc1_drop, 1024, 10, 'fc2')\n",
    "y_conv = tf.nn.softmax(h_fc2)\n",
    "print('Finished building network.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.训练和评估"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<b> 在测试的时候不使用 mini_batch， 那么测试的时候会占用较多的GPU（4497M），这在 notebook 交互式编程中是不推荐的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step 0, training accuracy 0\n",
      "step 1000, training accuracy 0.98\n",
      "step 2000, training accuracy 0.98\n",
      "step 3000, training accuracy 0.98\n",
      "step 4000, training accuracy 1\n",
      "step 5000, training accuracy 1\n",
      "step 6000, training accuracy 1\n",
      "step 7000, training accuracy 0.96\n",
      "step 8000, training accuracy 0.96\n",
      "step 9000, training accuracy 1\n",
      "test accuracy 0.9909\n"
     ]
    }
   ],
   "source": [
    "cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))\n",
    "train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)\n",
    "\n",
    "correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\"))\n",
    "sess.run(tf.global_variables_initializer())\n",
    "for i in range(10000):\n",
    "    batch = mnist.train.next_batch(50)\n",
    "    if i%1000 == 0:\n",
    "        train_accuracy = accuracy.eval(feed_dict={\n",
    "            X_:batch[0], y_: batch[1], keep_prob: 1.0})\n",
    "        print \"step %d, training accuracy %g\"%(i, train_accuracy)\n",
    "    train_step.run(feed_dict={X_: batch[0], y_: batch[1], keep_prob: 0.5})\n",
    "\n",
    "print \"test accuracy %g\"%accuracy.eval(feed_dict={\n",
    "    X_: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<b> 下面改成了 test 也用 mini_batch 的形式， 显存只用了 529M,所以还是很成功的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step 0, training acc 0.12\n",
      "step 500, training acc 0.96\n",
      "step 1000, training acc 1\n",
      "step 1500, training acc 0.96\n",
      "step 2000, training acc 0.98\n",
      "step 2500, training acc 0.96\n",
      "step 3000, training acc 0.98\n",
      "step 3500, training acc 0.96\n",
      "step 4000, training acc 0.96\n",
      "step 4500, training acc 1\n",
      "testing step 20, test_acc_sum 19.78\n",
      "testing step 40, test_acc_sum 39.57\n",
      "testing step 60, test_acc_sum 59.3\n",
      "testing step 80, test_acc_sum 78.99\n",
      "testing step 100, test_acc_sum 98.78\n",
      " test_accuracy 0.9878\n"
     ]
    }
   ],
   "source": [
    "# 题外话：在做这个例子的过程中遇到过：资源耗尽的错误，为什么？\n",
    "# -> 因为之前每次做 train_acc  的时候用了全部的 55000 张图，显存爆了.\n",
    "\n",
    "# 1.损失函数：cross_entropy\n",
    "cross_entropy = -tf.reduce_sum(y_ * tf.log(y_conv))\n",
    "# 2.优化函数：AdamOptimizer\n",
    "train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)\n",
    "\n",
    "# 3.预测准确结果统计\n",
    "#　预测值中最大值（１）即分类结果，是否等于原始标签中的（１）的位置。argmax()取最大值所在的下标\n",
    "correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.arg_max(y_, 1))  \n",
    "accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n",
    "\n",
    "\n",
    "# 如果一次性来做测试的话，可能占用的显存会比较多，所以测试的时候也可以设置较小的batch来看准确率\n",
    "test_acc_sum = tf.Variable(0.0)\n",
    "batch_acc = tf.placeholder(tf.float32)\n",
    "new_test_acc_sum = tf.add(test_acc_sum, batch_acc)\n",
    "update = tf.assign(test_acc_sum, new_test_acc_sum)\n",
    "\n",
    "# 定义了变量必须要初始化，或者下面形式\n",
    "sess.run(tf.global_variables_initializer())\n",
    "# 或者某个变量单独初始化 如：\n",
    "# x.initializer.run()\n",
    "\n",
    "# 训练\n",
    "for i in range(5000):\n",
    "    X_batch, y_batch = mnist.train.next_batch(batch_size=50)\n",
    "    if i % 500 == 0:\n",
    "        train_accuracy = accuracy.eval(feed_dict={X_: X_batch, y_: y_batch, keep_prob: 1.0})\n",
    "        print \"step %d, training acc %g\" % (i, train_accuracy)\n",
    "    train_step.run(feed_dict={X_: X_batch, y_: y_batch, keep_prob: 0.5})  \n",
    "\n",
    "# 全部训练完了再做测试，batch_size=100\n",
    "for i in range(100): \n",
    "    X_batch, y_batch = mnist.test.next_batch(batch_size=100)\n",
    "    test_acc = accuracy.eval(feed_dict={X_: X_batch, y_: y_batch, keep_prob: 1.0})\n",
    "    update.eval(feed_dict={batch_acc: test_acc})\n",
    "    if (i+1) % 20 == 0:\n",
    "        print \"testing step %d, test_acc_sum %g\" % (i+1, test_acc_sum.eval())\n",
    "print \" test_accuracy %g\" % (test_acc_sum.eval() / 100.0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 查看网络中间结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<b> 在学习 CNN 的过程中，老是看到他们用图片的形式展示了中间层卷积的输出。好吧，这下我必须得自己实现以下看看呀！！！</b>\n",
    "<br/> 关于 python 图片操作主要有 matplotlib 和 PIL 两个库（refer to: http://www.cnblogs.com/yinxiangnan-charles/p/5928689.html）。\n",
    "<br/>我们使用 matplotlib 来完成这个任务。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1 图像操作基础"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.  0.  0.  1.  0.  0.  0.  0.  0.  0.]\n",
      "img_data shape = (784,)\n"
     ]
    }
   ],
   "source": [
    "# 我们先来看看数据是什么样的\n",
    "img1 = mnist.train.images[1]\n",
    "label1 = mnist.train.labels[1]\n",
    "print label1  # 所以这个是数字 6 的图片\n",
    "print 'img_data shape =', img1.shape  # 我们需要把它转为 28 * 28 的矩阵\n",
    "img1.shape = [28, 28]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(28, 28)\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "# import matplotlib.image as mpimg  # 用于读取图片，这里用不上\n",
    "\n",
    "print img1.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP8AAAD8CAYAAAC4nHJkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAABm9JREFUeJzt3VmIlXUcxvFzZkLDKFpmsuVC0rBo0/YIWkCGyArahMCo\nm7YrTYqyoCCKaIVCWiyCqIhqiiIqMamLaBNv2gOpRCxajIRssXTmdNFNF74/p9E54/h8PrfPeXmP\nxZf34u95bXc6nRaQp2e8vwAwPsQPocQPocQPocQPocQPocQPocQPocQPoXbr5s0Geub564QwxlYM\nD7ZH8jlPfgglfgglfgglfgglfgglfgglfgglfgglfgglfgglfgglfgglfgglfgglfgglfgglfggl\nfgglfgglfgglfgglfgjV1Vd3s3XfX3dquU+du67c5x+8snF79adZ5bW/3XRwubff+6jcmbg8+SGU\n+CGU+CGU+CGU+CGU+CGU+CGUc/4uaB9/ZLkvX3hPuV9w8/Xl/tjmCxu3n8//s7z2hWeWlvtF715T\n7off9FO5b/n2u3Jn/HjyQyjxQyjxQyjxQyjxQyjxQyjxQ6h2p9Pp2s0GeuZ172YTSO/MGeU+tPrr\nsbv3YYfWH3j0j3I+/4D69/6vnHdy4zb01Zr63ozKiuHB9kg+58kPocQPocQPocQPocQPocQPocQP\noZzzU+qdun+5b352crn37/5b4/bLmb+X13Y2/13ubJ1zfqAkfgglfgglfgglfgglfgjl1d2Uhn6s\nX809af7Ucl/84bLG7aLbF5XXTl/8QbmzfTz5IZT4IZT4IZT4IZT4IZT4IZT4IZRzfrbLlh9+LPer\nvri0+dq9h3b01+F/8OSHUOKHUOKHUOKHUOKHUOKHUOKHUM75qfX0lvMPC5r/Ce5Wq9V655j7G7dT\nVl43qq/EjuHJD6HED6HED6HED6HED6HED6HED6Gc84fr3W/fcv/y7unlvvKse8t99uvXNm4zb3u/\nvJax5ckPocQPocQPocQPocQPocQPocQPoZzz7+L+OvvEcl+85KlynzXp1XKf8+AN5T7zPmf5OytP\nfgglfgglfgglfgglfgglfgjlqG8Xd/Kdq+p98oZyv/jyheV+0NuO8iYqT34IJX4IJX4IJX4IJX4I\nJX4IJX4I5Zx/F/fZhdPK/cqn+sr9/iceLvdLVl1R7jNu/LVx27JmbXktY8uTH0KJH0KJH0KJH0KJ\nH0KJH0KJH0K1O51O12420DOvezdjh9jWq79bi9aX82tHPNe4nX7HovLa/kc/qO/NVq0YHmyP5HOe\n/BBK/BBK/BBK/BBK/BBK/BBK/BDK7/kpTV5Wv/e/tayez7i6+Sz/sgX1xW98cka5t9//uL45JU9+\nCCV+CCV+CCV+CCV+CCV+CCV+COWcnzHVt7T5N/kPnjBQXnvALb+U+15zt/Gz9S6+q2Ii8uSHUOKH\nUOKHUOKHUOKHUOKHUI76GDfTXq73tx4fLPfz+s4q96H19WvF03nyQyjxQyjxQyjxQyjxQyjxQyjx\nQyjn/Oy0etueTWPJf10IJX4IJX4IJX4IJX4IJX4IJX4I5Zx/hDade1Lj9u0lm8trZzw0XO7tDz+p\nbz6RX0Hdbn699tqL6z/Xkg3Tyr2zceOovhL/8uSHUOKHUOKHUOKHUOKHUOKHUOKHUM75R2iPrzc0\nbsdOa95arVbr+RffLPfjVs0v974lU8p90nufN27DmzaV126vnj33LPdvbjyqcVs+577y2ktvvb7c\n99nU/M9/s22e/BBK/BBK/BBK/BBK/BBK/BCq3eniz0UHeuZN4N+mNuuZUh/FrV00u9yfvuKBcp89\nqT6RffLXgxq319cfXV770cfTy721jf9jC+YsL/fTpqxu3K66a2F5bd9SR3mjsWJ4sPl31P/hyQ+h\nxA+hxA+hxA+hxA+hxA+hxA+hnPPvBHr7++sP7L9vOa+bu1/j9vtR9U96Zx+yrtzP6f+03J/9rvmV\n5q1Wq/XXIwc2bnu8tLK8ltFxzg+UxA+hxA+hxA+hxA+hxA+hxA+hnPPDLsY5P1ASP4QSP4QSP4QS\nP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QS\nP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4QSP4Rqdzqd8f4OwDjw5IdQ\n4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ4odQ\n4odQ4odQ4odQ/wC4RebHYo2EdwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4ce5121f90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(img1)\n",
    "plt.axis('off') # 不显示坐标轴\n",
    "plt.show()   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "好吧，是显示了图片，但是结果是热度图像。我们想显示的是灰度图像。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAMGgAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4ce4dd9710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 我们可以通过设置 cmap 参数来显示灰度图\n",
    "plt.imshow(img1, cmap='gray') # 'hot' 是热度图\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们想看 Conv1 层的32个卷积滤波后的结果，显示在同一张图上。 python 中也有 plt.subplot(121) 这样的方法来帮我们解决这个问题。如下：先看两个试试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHQAAABGCAYAAAAdKLCBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAA3JJREFUeJztmr1L62AUh38pF6WIxOgSpBYnlxYcdCjiKLipFEknB8FN\n3ERw0l0UJ7csOqlDQXBoobhncRAk6OIf0NJOrajk3OEusX7c1tu+eXPueeAsbUh/4el5v1qDiCDw\nIRF1AKG3iFBmiFBmiFBmiFBmiFBmiFBmiFBmiFBm/FL5YYZhaHUsRUTGV+/FKWsY6VBmiFBmiFBm\naC10fX0dV1dXeHh4QKlUQqlUQjabjTrWp+iS1VD581mnC42pqSkAwO3tLRzHwevrK1ZXVwEA+Xwe\n5+fn2NvbAwBUq9Uf5+nFokiHrO0XKisA1E2lUqkPr01MTND19TX5vk++79P4+HhX9wwXl6zh0nrI\nFbpHyyH3b4yMjOD09BQAMDQ0hMXFRby9vXV9HxX7UBVZ2y/Udsj9rizLIsuyqFar0e7ubuRDbpRZ\nw6X0pKiX1Ot1AEClUoFlWRGn+R6VWWUOZUYsOzSRSGBtbQ0AsLy8jJ2dnYgTfY3yrHGbQ4eHh+no\n6IiazSY1m006ODjQYtsSZdZYzqG5XA4AcHl5idHRUWxtbQEAXNeNMtanRJo1Lh3qeR55nkfPz880\nMzPTk9Unl6zhkkURN+LSobZtk23bVC6XqVqtkuu65Lou2batXYeqzvoud1yEhiuXy1GxWKRisUgv\nLy9UKBS0Eqo6a+yFhstxHLq7u6NsNqulUBVZwyVzKDNieTjfzuHhIdLpNBzHAQB0+kwUwZ/E+pG1\n/cJYD7kAaG5ujoIgINM0yTRNbYfcfmVlOeQaRmdfYB3oZ1athM7Pz+Pk5ASZTAaZTKajBzcMA47j\n4P7+Hq1WC61WS0FSfbNqJVToATrNoel0msrlMgVBQEEQ0NnZGc3OztLAwMCHa5PJJCWTSdre3qZG\no0FLS0tKty06ZQ2XdqvcwcFBbGxsAAD29/cxNjaGx8dHPD09AQA8zwMArKysAABs28bm5iYuLi66\nzvOvq1xdsr7LrZvQMKZpwrIsLCwsYHp6GsCfv01OTk7C930AwPHxMW5ubn6Up5fbliizhpE5lBla\nd2i/ieJg4adIh/6niFBmiFBmiFBmiFBmKF3lCv1HOpQZIpQZIpQZIpQZIpQZIpQZIpQZIpQZIpQZ\nIpQZIpQZIpQZIpQZIpQZIpQZIpQZIpQZIpQZIpQZIpQZIpQZIpQZIpQZvwG7OblPW/8oxAAAAABJ\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4ce4d004d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplot(4,8,1)\n",
    "plt.imshow(img1, cmap='gray')\n",
    "plt.axis('off')\n",
    "plt.subplot(4,8,2)\n",
    "plt.imshow(img1, cmap='gray')\n",
    "plt.axis('off')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 显示网络中间结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "好了，有了前面的图像操作基础，我们就该试试吧！！！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 28, 28, 32)\n",
      "<type 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "# 首先应该把 img1 转为正确的shape (None, 784)\n",
    "X_img = img1.reshape([-1, 784])\n",
    "y_img = mnist.train.labels[1].reshape([-1, 10])\n",
    "# 我们要看 Conv1 的结果，即 h_conv1\n",
    "result = h_conv1.eval(feed_dict={X_: X_img, y_: y_img, keep_prob: 1.0})\n",
    "print result.shape\n",
    "print type(result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "好的，我们成功的计算得到了 h_conv1，那么赶紧 imshow() 看看吧！！！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAADwCAYAAAAQNZ8pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXl4lOW9//+aJZOZyUz2fScLCUkIhH1f3RBEatWirV3V\nq7Z2se3pOZ5zefo9ntNTu5562VZ7jr1srQt1RbFCRQEFBQKELYGQhOw72dfJrL8/5vfcZkgCAZOZ\nYbhf/0iSGfPJM8/9fj73Z7tVLpcLiUQikVz7qH1tgEQikUimBinoEolEEiBIQZdIJJIAQQq6RCKR\nBAhS0CUSiSRAkIIukUgkAYIUdIlEIgkQpKBLJBJJgCAFXSKRSAIErTd/WXZ2tl+1pVZWVqom+plK\npfIrW10u17i2bt261a/s3LZt2zV/TeHasjUlJcWvbG1oaBjX1pCQEL+yc3BwcMJrWlVV5Ve2ZmVl\nTWjraLwq6JOhu7ubzs7OMd/PzMwEIDw8nIGBARwOh7dNu2axWq1ERUUBkJeXx8KFC0lJSaGhoQGA\n4uJiSktLGRoa8qWZYzCbzURERBAbGyu+NzQ0REdHB+3t7T607NpjYGCAkZERAIaHhyd8XUxMDADB\nwcFesetirFYrdrt90q83Go3TaM2l6evr49y5cwBUVVXR3d2NxWIhPj4eAJPJRHR0NAUFBQCEhoZO\nu00y5CKRSCQBgl956FardVzvHOD8+fMAxMbGkp6eLp7ifX19XrNvssyfPx+A9PR0Tpw4IWz3BU6n\nk/b2dpQhbG+99Ra//e1viYyM5MEHHwRg06ZNrF+/nnfffReAM2fOYLPZfGazQn9/P/39/dTX13t8\nX6vVkpGRAUB7ezsDAwO+MA+A5ORkABobGwkNDfXYTUy02/Q2NpuNnp6eSb32woULAKhUKuLj49Fo\nNNNpmgdOp/OKvHNw79i0Wi06nW6arBofq9XK8ePHefHFFwHo7e2lpKTE4zWpqals3LiRxsZGAHJz\nc5k5cyZ6vX7a7PIrQVer3RuGsLAwAJYtW0ZOTg5BQUEcPXoUgCNHjnDq1Clyc3MB94JSLpi/cOzY\nMfHf22+/nZkzZwKwc+dOr9syMjLCxx9/POb79fX1fOtb3xJfP/jgg9x7770ApKWl8f777/tdCEbB\nbrdTXV0NQFBQEAkJCbS0tHjdjoSEBLHlv+GGG8jOzmbDhg289tprADQ0NGC1Wjl58iTgFlYl7OHv\nuFwuWlpaiI+PR6v1jkwEBQV5OGsWi4X09HRqa2svucbtdjsul8urYSKn00lLSwtOpxOAnJwczp49\n6xHOqq+v5+mnn2br1q2Aey22tbWxcuXKaRN1lTfH514uKep0OhkaGmLp0qUAItar1WpJSEgA4MSJ\nE/zjH/+gpqYGcMfUDQYD9fX1qFSTyhsIpjopGhERwbx586ioqAAQMerVq1eLn7/33ntXJZRXmxTt\n6+ub9IMkNTUVgG984xukpqayd+/eKxYgXyVFw8PDJ+2FKkxHUvRrX/saKSkpgPvaV1dXU1dXB7gX\neGhoqPh6qmy9XFJUpVIREhJCXFwcAFlZWcyfPx+TycTx48cBePHFFyfMSyQlJYn/z2S42qSoTqcj\nOTlZ2JmRkUFsbCzf+c53xGt2797NV77yFSGkozEYDFdk52dJig4NDXHo0CHxuw4fPsyf/vQnABYs\nWAC4d4+jd5dr165lwYIFzJo1i+XLlwOfOrGX45pMiqrVatLS0sTTy+FwUF5eTnV1tVishYWFLFu2\nTCQaqqqqGBwcJCoqSmxvr1TYp4JFixah1Wo5ceKEsFURmQ8//BCAL37xiyxbtowPPvgAbz1Iw8LC\neOihh8Q1bWlpITs7m9LSUvbv3w9AR0cHgLj5fvvb33LvvfcyZ84cjhw5AuA1ew0GA0VFRQAMDg6y\nZs0a5syZQ05ODgC/+tWvePPNN8e8r6enR4QHfJkwLy4uJjExEYAtW7ZQXFwskmHd3d1oNBrS0tKu\nStSvFo1GQ35+vlgzWVlZpKamEhERQXp6OgAzZ87khRdeEPeA4owAdHV1AYjE+nQxPDxMa2srK1as\nANz3nE6n48033xShrIULF/Lqq6/y6KOPAgjnSXk/eCdRqtfrMRqNPPnkkwBiB2EymUQ0AfDQpdOn\nT6PX67Hb7SJxmp2dPaV2yaSoRCKRBAh+5aEHBwcTFxfHqVOnALe3Ex0djclkoq2tDXDH0MPCwli3\nbh3gDmf09PSwb98+ent7Ad94aMXFxWO+d3EIoL29nbS0NIqKisYkUKYLvV5PQUGB8LLS0tJISkpi\n06ZN3H///QD89a9/Zdu2beI93d3d/P73v+euu+4S218lWTbdhISEUFtbC8DKlSsxGo10dXXx/vvv\nA/C9732PdevWeWzDFXzpmWs0GgwGA2VlZZSVlQGwbds2XnrpJebMmQO4dxxHjhyhoKCA1tZWAK/E\n1NVqNRaLhQ8++ABw53b0ej3x8fEi7pyUlERBQYFILvb29oqCA29d15CQENLT03nppZcAd1FBXFwc\nXV1dYv2vX7+erVu3cssttwDuYglffO4jIyOMjIzwhS98AXDvaDo7O0lNTRUe+u7duz2S4nq9nsHB\nQU6fPs3cuXOBqffQ/UrQR0ZGqKio8Mh0d3Z20tvbK+J4wcHBHDt2TCz6X//616xZs4bm5maam5t9\nYfak0ev1pKamMjAw4DVBHx4e5vDhw6JqRa1Wc+TIEXQ6HVlZWQCsWbOG9957T4g+uLetO3bsYMOG\nDQBeqyJQwj8Af/vb38S/lZDR22+/zebNm3nkkUcAeP755/2iksThcIyptjl//jyLFy8WSekVK1bQ\n2dlJXFycCCGMDm1MF1arlbKyMiF8DQ0NOJ1OgoKCRJVOc3OzR6366OoxbyVFLRYLVVVVWK1WAGpq\naqipqUGtVosc2s6dO6mtrSUtLQ34NKThbVE3GAwsXrx4TJhPo9GIKre0tDSeffZZ8Z7GxkbUajVG\noxGLxTItdvmVoAMeYq7Ewq1WK4cOHQLcXs5oIiIicDgcxMTEEBkZCXiKgj+RlZVFcnLymL9huhnt\nBSrJJLvdLqovCgoKuOOOO4QXXFtby9DQEEajUZRczpo1y6s2X4yyABobG3nzzTcxmUwAzJgxA5fL\n5fEw8je+/vWvA/Dtb3+bu+66C5vNJvIX3mL0ulLEx2KxcOLECQBKS0vp7e31EMbExEQKCwtFBZE3\nHpxWq1UkChVbHA4HlZWVgDuuruSkACIjI8X6V5qiFGdvuhldqRIUFAS415eSaxjvetXX17Nx40YW\nL148LTbJGLpEIpEECH7noV/M0NDQmFBKfn4+X/3qVwF3JUljYyOtra1X3JTgLZQGnsWLF3P8+HHe\nfvttn9rjcDhQqVREREQAcPz4cSorK8d4NmFhYeOWh/mStrY22trahDcG+K13HhERQXd3t2gPV6lU\nFBYWUl5e7vMa/5GRETo6OiasXoqNjWXlypWEhoZecTnoVOJwOC6ZZ+jq6iInJ4eioiKqqqq8aNlY\nLBYLZ86c4dVXXwUYtxoL3I2HSgh5qq+t3wv6xWKemprK448/LhqLqqurqampobe312uldVfC1772\nNbZs2QJAU1MTJSUllJeX+9SmCxcu0NnZKeK3SjL5Ymw2m4iz+xsXJ2lVKpVffP5RUVGiDl0JEyhd\nrU1NTdjtds6cOePzh9BESe4lS5YA7kYps9lMbW2tT6/rRB3LSlx/+fLl3HLLLfT19Y1bmOBNamtr\neeqppzhw4MCEr9FoNNx8882EhIQA16GgGwwGj+6r5cuXU1BQIDyc0tJSTp48SV1dnRAmX9Shj0du\nbi4//elPRULnl7/8JQcPHvSxVXDq1Cm6u7s9vrdo0SLCw8MBOHnyJCkpKaIeHPxzxAK4r/HatWs5\nf/68qOLwVbWL0WgkJiZGJEeVXInS8GIwGDAajdTW1orEn68Y7wGodDQD1NXVodFoaGho8FqF03ik\npqYSHh4uYv3groZRdo5ms5mqqio+/vhjUQvurSTuxfT19YkKvYm48847SUpKmrZr6veCbjKZSE1N\nFV7uqlWr2LZtG5988ol4jcvl8vkWdjz6+vo4ePCgEEaz2UxSUpLYgvuK8QSvuLhYeGe7d+8mKCiI\nV155hbNnz3rbvCti8eLF6HQ6NBqNzydwDg0Njdl9paam8te//hVwTzx86aWXxh3F4G0yMzPR6/Wi\nkEBxOpTyQMVm+HRKoDemBV6MVqtlxowZfPe73wXcO/IXXnhBJGrfeeedcd/jC5xOJxs3buTll1+e\n8DVpaWls375dlC0qoZepQiZFJRKJJEDwew89ISGB1NRUUQo0PDxMQkKCeAqfPn0ao9FISkoKTU1N\nAD7fzi5btgxw18x//vOfF99ftGgRK1aswGKxeLX1+2I+//nP09raOmbGi1IaunHjRu69917mzZsn\nYny+rPG//fbbRVnYkSNHPK7dX/7yF/Fvs9kMuKc0+gMPP/wwTz31lAjBvPTSS3zyySfExsZ6rbRu\nIpKSkrj99tvFOQO1tbXs27dPjHoYjRJuCw4O9vqc9Lq6OjZu3ChyZsuXL+eOO+7gX//1XwHYtWvX\nmPcoJbfeJjk5WYT9JmLXrl2sX7/eI2Q0lTufa0LQVSoV//u//wtASkoK69atE5MBq6urqayspKGh\nQVQ+KMLuK0aHg1JTU8U2tri4mKGhIbKyskSNqi9Gv+bk5HDTTTexcOFCAJ588kmPxGhDQwM///nP\nWb58Obfeeivg7h691MEI04XBYOD8+fNs2rQJgK1bt3L06FGeeOKJMa9VhFyv109b48aV0NHRwf79\n+8XQq+LiYjFIThEoXyXI1Wo1lZWVIkw1c+ZM7rnnHpFH2bNnzxino6OjY8pDBJcjLy+PN954Qzgb\nDz74IOvXrxeff0JCAs8995xXbZqIzs5O7rnnHp555hng0/4PZVhXQ0MD7e3tHsnbsrIylixZMmV5\nP7+atjgeWq2W5ORk4ZG3trbS09MjPPbc3FwKCgqw2+0iNn306NFJlTD64gg6JYl3+PBhgEl3jE7l\nEXQ6nY5Zs2aJbjuz2czhw4f56U9/6vE6lUrFmjVrAPdQNKVd/VJMx7RFvV4vhkjddNNN3HrrraJD\nb+vWrVfd8OKNI+hCQkLEFD6VSkVxcTHPPPOMaPnu6emZlLc+1UfQKetKiZ2np6eTmZkphGXv3r10\ndHSIZjOFxMTEy04InMoj6IKCgkhJSfF4QM+ePVs0a7W3t/N///d/HpMPlaFel4ulT/URdFarlfLy\nctGw9/7773s4d+De5dx2223i/k1MTOSBBx4QO9CJmOy0RRlDl0gkkgDB70Mudrud2tpaEROLiooi\nPj5e1HoeO3aMDRs2sGnTJubNmwe4Sxl9eYrNpSgvL2ft2rVilGlnZ6fX4+nKoQvKTPkZM2ZQVFQk\nhnUp8ydiY2PFvOzw8HD0er1PGo0sFosITdTV1XHo0CHWr18PwH//93/zxz/+0Wuzca6UwcFBccDB\niy++yJe//GVKS0tF2WhRUZFP4unKulLCQS0tLbS1tYn66La2NhEyGD2vxNs16TabjerqamFXVFQU\nZ8+e5Sc/+QkAd999t7gnld1Gc3OzT+5TnU5HYWEhM2bMANwjNRYvXsxvf/tbwL1zGBkZobm5Wexy\n1Go1Dofjsh76ZPG5oF/cCRoXFyc+mOHhYRHjU8oSh4aGCAsLE/OEq6qqqK+vJyoqSrw2KirKbwU9\nNDSU9vZ2CgsLAfdxb1Mt6A6HQ9Q+5+XlERYWJsIS1dXVDA8P43K5RLLr5MmTNDc3j0l4tbW1iSaZ\nkydPsmDBAq/U+Cu/w2QyjUlwDg8PU1xcLGqOs7Ky/PazvpgvfvGL/OIXvyA5OVnMolGajqaakZER\nsWYcDseYnEJMTAzBwcHiNbW1tXR1dREdHQ244+VKXkUJb7pcrkkfyDBZLtcJCu76fqWmf3BwkIiI\nCFH48MorrzAyMkJISIiHjkxH6eLw8LBoxuvp6SE5OVloTmdnJ5mZmZhMJpGcLyoq8ggXPf3004A7\nzKp875FHHpnSa+pzQb+YtrY2cSPl5OSgUqmwWCwiJu5yuaisrPRodElJSSE2NlZ05plMJq/VJSux\nXY1GM6mzQ3Nzc0lKShKCOx0VOf39/WKEZ0tLC3fffTebN28G3EnGf/zjH5w6dUoIoXKclkJSUhLN\nzc0eC3hgYACbzebVsxtNJhNpaWk0NTWNaYRShL6+vp7+/n5CQkK8PvTsanjhhRdYu3atiKFP19mt\ndrv9ktdDaWxRxDo4OJjGxkYhWMHBwWLInSLyiYmJVFRUTKn3q9PpxDWY6P87usdEr9fT0tIi1k91\ndTUmk8lD9OfOnUtNTc2UX9uRkRHROPTWW29hs9nEziEpKYmMjAzy8/PFZ2symVCpVGOOzxv9cF23\nbt2UrimfC7pWqxVniIL7Caz8wUpy4VKsXr2ajRs3MjAwILaP3jy3Udku33LLLeTl5VFRUTFh45DZ\nbGb58uXMnj2bPXv2AExL487AwICwq7a21iOx9Z//+Z98//vfx2QyCTvPnz9Pa2urCGONLgFVPMnh\n4WGvHRisbOtbWlpoaWlh2bJlQnhsNpvHwdEulwuTyeQ1MVeO6VPGICsPGrPZTEdHx2UTx1arleTk\nZHEC03SdM6vX6z2ShBMxUUJZeWDm5uaKee5Op3PKd2gGg0FcC6vVetlOS0UbRn/eAwMDDAwMiGad\nzMxMcebsVGK324Xnn5CQMO6sFoPBwOzZswF3QryqquqSI5IXLlzI4ODglD0kZVJUIpFIAgSfe+hB\nQUFi6t+MGTNYtmyZOJOxtLSUv//97x4HrSooXsMPf/hDVCoV7e3tIhY9OvbuLZQGh6SkJBHf7+vr\nw2KxiCTJd77zHSIiImhraxOe2XRsuaOiosRW8GLP9bHHHuOxxx4D4K677gIgPj6e48ePjztUSPH0\nZ82ahVarnZak2OXOAr249OtyBAcHT9suTbkXIyIiWLNmjWgKUavVOJ1Oenp6PLbYJpNJNJs0Nzcz\nd+5czGaziPdOZhd6NYSEhIiDiDUaDRUVFR5htclQUFDAjTfeKD6X+vr6Kf/8+/v7hdd911138dBD\nD4md4/bt2yeVMNZoNMyZM4fbbrsNgAMHDkzL+jcajcJDHxwcJD8/X5xOpaDkeC6HcnBMXFzcpEK1\nk8Xngm4ymUQzQ1dXF+Xl5WLL8uijj/Ktb32LI0eOiOE8Fy5cICYmRnx42dnZ7N+/n5KSErHd9eYJ\nNkqDSGhoKKdPnx7T1GQymUT1jcFgoLm5mbfeemtabYyPj+fHP/4x4O7+nGhbr4z5nAiVSiU6CWfP\nnj1tjUVKyG3OnDmkpKSIBXGlTTfKZMjxRi5PNSdPnmRgYIBvfOMbgDtMZbfbUavV4v7VaDQ0Njay\nd+9ewP2gcTgcDA4OCtGfrlk5Op1OFBfMnDmT+++/X8RqGxoa+OCDD9i1a9cYgVZO29mwYYMQMGUs\n7XRUjxiNRrEWdu7cyTe/+U3RBfrzn/+ciooKduzYIQ61OH/+PD09PSKZvGjRImpra7nhhhuEQ1da\nWjotjofNZhPVdh0dHR5iPmfOHBwOB9XV1ZedKxUVFcWPfvQjwB0umkpbfd5YpNPphEceHBxMW1ub\neAoWFBSwatUq8vPzhehrNBpiYmLEhf3ggw/YuXMnZWVlIlZlsVgmFeubysai+Ph45s6di8lkEjdo\nZ2cnUVFRrFy5EnDHIPft23fJ8ZoTcSWNRcHBweJBk52djVarpbS0FHC3yk92bvSqVauEOA0NDU1q\nANrVNBYpCa6cnBxuv/12br75ZsD9Wb/++uv84Q9/uGQli16vZ+XKlSLuq3QVXo6paCxSKoPuuece\ngoKC6O/vF8nE5uZmzpw5I14bFRXF17/+dcxmM2+88QaAxxTBq7V1vMYirVYr4v0ZGRnk5eWJUtns\n7Gyio6Pp7+8XItjd3U1ERIQ4Gq+pqYn6+npKSkpESWhjY+OkGvaupLFIp9OJ7tORkRFMJhNLly4F\nYOnSpcyfP5+8vDzhxbe3t6PVasWubt++fTidTsrKynjhhRcAd/PhZPI9V9pYZLFYxO7h4MGDvPji\ni2NyJmlpaaJjXRmVPLrwoaCggB//+Mei7NZqtU7qmsrGIolEIrnO8LmHDojSuIiICCIjI0Vcub+/\nH4fDQVhYmPA25syZQ2xsrGiKKS0tpaGhgY6ODvG+yWbip6P1PzQ0VOw45s6dS25urthe79q1a0wJ\n02S50tZ/5ZrGx8d7tPnHxsZiMploamoSZZ719fW0tbWJHc7oE+GVEtLJjif+rK3/iYmJ4rzFzZs3\ns2XLFsLDw8U8nNraWiorK0UVQ1BQEL29vRw4cOCKx9JOR+t/Tk6O2E0o4TdlfMJtt93G4OAgr7/+\n+hXHzq+m9V9ZBxEREaSkpIjcTnJyMunp6SQnJ4v7IiMjA41GI3ZyR44c4fDhw5w8eVJ4oZM9EexK\nW/+VezUqKoqwsDCxQzcajSQlJYkR2uA+gCMqKkp8/s3NzZSUlPDBBx+IndFkq7GupvVfCTm1trZy\n8uRJcTasMiphPBR77rjjDu68804WLVokfjbZazpZD90vBH00Go1GXIDRSQgFpTxR2YIZjUb0ej0a\njeaKS6p8Mcvlavkss1y0Wq3oRIuOjiYmJobk5GRx4rvJZKK3t1eIZltbG01NTR7XebJM9SyX+Ph4\n8vPzxYCj/Px8QkNDRR/C8ePHee+998YkpyaDN2a5rF69WoStmpqaOHDgwFUdbvBZZ7mo1WqxlkJD\nQzGZTERGRopQphIuUqZr9vX10dPT49EDMlk+yywXjUYjBN5sNqPT6TAajaJ81m6309fXJ8IYFouF\nvr4+nE7nFTfofNZZLna7XdjR3t5OfX09FRUVIi/S19dHRESEKMtcsGABs2bNwmAwXHHS9poVdG9y\nvQi6N5mO4VzThTcEfaqY6uFc08lUDueaTqZ6ONd0ImPoEolEcp0hBV0ikUgCBCnoEolEEiB4NYYu\nkUgkkulDeugSiUQSIEhBl0gkkgBBCrpEIpEECFLQJRKJJECQgi6RSCQBghR0iUQiCRCkoEskEkmA\nIAVdIpFIAgQp6BKJRBIgSEGXSCSSAEEKukQikQQIUtAlEokkQJCCLpFIJAGCFHSJRCIJEKSgSyQS\nSYAgBV0ikUgCBCnoEolEEiBIQZdIJJIAQQq6RCKRBAhS0CUSiSRA0Hrzl6lUqkmdSK3T6QCIj48n\nNDQUo9FIT08PAC0tLdjtdqxWKwAOh+Oq7XG5XKrPaqu3mMjWa8VOgC1btlzWVoPBgMFgACAuLo6U\nlBRSU1MJCwsDoL29nbNnz3LmzBkAhoaGrtrW7du3X/OfP8CKFSsua6vD4WB4eBiAzs5Oenp60Gg0\nREVFAe61ZjAYsNls4vVXy4EDB8a1dcGCBZe102Kx0N3dDUBzc/O4r1Gr1eTm5gKIe+VqOHr0aEB8\n/qORHrpEIpEECF710CeL4n3X19cDkJWVxbJlywC3937ixAmqqqoA9xN9ZGQEl8uvHqh+S2hoKGq1\nWux4/AmtVkt2djbh4eEAzJo1i6CgINRqNRUVFQCkpqZy2223MWvWLACOHDnC+fPnhWcpGYvL5WJg\nYICamhoABgcHxc96e3sBqK6uJi8vj7i4OAA0Gg02m82r68rhcNDR0UFbW9slX+d0OsUOLSwsjPT0\ndLRav5Qyr3NNXIWqqiqx/Vq3bh1r1qwhKSkJgOLiYgYHBxkYGMDpdPrSTL8mKysLcC/u8+fP+9ia\n8QkKCsJoNHL06FEA3njjDex2O1lZWRw5cgRwh1iWL1/O3XffDbjvh+joaI4cOcLIyIjPbPd3tFrt\nZUXvzJkztLa2ApCXl4fRaGRoaMhroq5Wq4mJiRF26vV60tPTsdvtIgxTUVGBxWIR7+nt7eXkyZMU\nFhYSFBTkFTv9Gb8X9Pz8fLq7u4XXfvDgQUwmEwsWLADcN6qy2Pv6+nxmpz9jMBhYt24dAMPDw2zY\nsIGOjg5CQkIAaGxs5Ny5c9TW1vrQSrdYv/7662L3pewiDh8+LF5jMpn429/+xkcffQTAww8/TFFR\nEUNDQxw/fhzAp7u1NWvWkJCQAMDLL7/sMztGo9VqKSwsZPbs2YDbwy0qKuLChQvs3r0bgJKSEgC6\nuroAKC0tZf78+ULUYfqvq1arJTMzU+zQlixZwuzZs7HZbFRXVwNw7NgxPvnkE86dOwd8usOorKwk\nLy9vWu27FvA7QdfpdEK8N23aRGRkJAAffvghAHV1dWzbto2HHnoIgK1btzI4OMiZM2fE+0Y/wSWw\nePFiNBoNAIWFhWRlZbFlyxaxbT127BinTp3iwIEDABw6dMgndlosFuGdT8TAwADgTo4DPP744zzy\nyCMsX76cjo4O4NNQnTdZsmQJoaGh3HXXXSxevBiA3/3ud/zXf/0X//M//+N1e0YTFBREdnY2GRkZ\ngNsT3rp1Kw0NDaxduxaAv/zlLx4PoJ6eHiorK8nPzxeer7K+pgutVktSUhJms1l83d3dTXBwMKGh\noQBkZ2czMjIikrnnz5+noqKC4eFhsYtPTEycVjv9GZkUlUgkkgDBrzx0nU5Hamqq2F51d3fT399P\na2uriKsFBQVhs9l4+umnAXdp28aNG+np6RFlWdJD96SlpYULFy4A0NrayieffMK+ffuEx5afn4/J\nZBIhGLPZzLFjx8T221uo1WoiIiJEvHQyjIyM8Otf/5rIyEiio6MB33johw4dIicnhz/+8Y/88Ic/\nBOBrX/sav/jFL7Db7QA89dRTXrcL3CGWCxcuiM+3p6eH3/zmN3R1dbFlyxYAfvWrX5GcnMwvf/lL\n8b76+noyMzNFGfF0e+iKnUqOp7Gxkfb2dmbNmuVRXmkymYRN2dnZBAUFUVZWJnMo+JmgW61Wamtr\nRXKzuLgYl8uFy+UiPj4egMjISNra2sQHWlNTg9FoZPXq1T5ZyNcCSrwRoKysTPxbuaZr164lNTWV\nTZs2Ae449YULF7wu6MHBwSxZssTje2q1GovFIio0lIe9sgXv6+vDZrPx0UcfkZ6e7lV7L2b0dQZ4\n8sknOXc2wQ4WAAAgAElEQVTuHPfccw/gvs579+71ul1Wq5VTp05x+vRpALG+HA4HTU1NAHzuc5/j\nvvvu49SpUwD84x//ANw5F71e7xU7bTYbVVVVoga+vb0dm81GZ2enuFczMzPRarUivFZXV0dUVBTx\n8fFes9Of8StBB4Q3A3iUoik3XkxMDIBHY5HBYCAkJEQkUyZqSJB4olQ0vPzyy9x1111CELu7uzlx\n4oRPbFIe1KMJDQ0VcelFixZx9OhREUuPjIyktraWd955h/nz5wOQnJzsPYMvw65du9i1axcAd955\np8/smKiss7y8HHDH+1euXCkauMBdGeV0Ounv7/eKjeC5/u12OyqVCqvVKuw8e/Ys0dHRwjHp6elB\nr9dz8803i/tZEfvrERlDl0gkkgDB7zz0y6HEghXS0tKYO3cuzzzzjNdDBIHEsmXL2LNnDwC/+c1v\nAHcsXamO8VUjkk6nIyoqisLCQgAKCgr461//yiuvvAJ8ussARLjAnzz00bz22mu+NkHgcrkYGhqi\nsbERcHu1JSUlYpezYsUKli9fzrFjx0QoU9kdexObzUZHR4fHrnt0aOuGG25g3rx5BAcHy7JlrkFB\nB/cWfMOGDYA7KXL69GkuXLjwmeZ6XI+o1e4N2v33309LSwu/+tWvAHc4a86cOURERHjE3H1BYmIi\nc+fOFTHzffv28e6774r649FERER427yrIjQ01OfiMzIyQkNDA52dneJ7wcHBFBUVAe48isFgwGq1\nfqa5Lp+Vvr6+MSFUg8HA1q1bAbjjjjtoamri+PHjcv1zDQr6okWLePTRR8VQnu7ubkpLSykrK/P5\nIrmW0Gg03HHHHYB7gVy4cEE0xKSkpKBWq6mtrR2zI/I2YWFh9PT08MwzzwCeTUYX46+euUJiYiLL\nli3jjTfe8LUpaDSaMUnEhQsXUlBQALjF/eDBgzQ2NmI0Gn1hIuD+/GNiYsQDfN68eSxdulTsGF95\n5RXRkyAF/RoUdKXC5eabbwbgk08+4be//S1tbW2iAULO9bg8d911F1//+tfF1zt37hQLV0mK+sO8\nlw8//JDe3t4Jk7RxcXHcfPPNJCUliYePLx9CGo1GNLaEhoZ67HCam5v9JuySlpbGkiVLhBg2NDRg\ntVp58cUXAXfJYH9/P9HR0aLRxxfrKjk5mVWrVpGSkgJ8WuV29uxZAJFwBkRSXylxvB6RSVGJRCIJ\nEPzeQx89CgDcsb/nnnuOnTt3iu/l5OTQ399Pe3s74PYwfRn383dyc3PJy8sTnpfdbucLX/iCGLPw\n2GOP+dI8D8rKyi5ZhtbW1sbg4CDz588Xn//+/ft9tv02m82igSg1NZWzZ8/y7LPPAvikBn0iEhIS\n+MpXviK+Pn36NK+++ip///vfPV4XExMjQjNOp9Pr6yo6OppFixaJprHg4GDsdruwKTExUcTYlVlE\nRqPxM81Jv5bxe0FPSEhgZGREjNQMCwvj9ddfF4OCbrjhBu666y4AMbDJZrONmzSTuOnr66O+vp6G\nhgbA/UBUKkQAbrrpJg4cOOAXMcmwsLDL1hW//vrrDA0Niftg5syZnDx50idDunp6ekT35dtvv829\n994raqv9SdB7enro6upi4cKFgNtxOnPmzBhBLy8vF6/R6/Venb4I7tk9FRUVohkqODgYnU7HmjVr\nAAgPD6eyspLy8nKR4G1oaGDmzJles9Gf8HtBb2pqIj4+nrS0NPG9tLQ08TR+//33iY+P58477xRP\n6urqavr6+uSM9Alobm7mrbfeoq6uDoDbbruNRYsWiVnYZrMZnU5HfX29h9D7gtzcXDQajZiHPhE7\nd+4U9q9du5bS0lKPJhVfsHnzZrZu3SrKQN9//31uuOEGn9qkUFdXx/PPPy/W0YoVK/i3f/s3cRLQ\nj370I7q6uhgYGBDO1MyZM73+kG9sbMRmswkbsrOziYyMJDg4WLwmKSkJh8Mh5rz39/fjcDhEye31\nhIyhSyQSSYDg9x663W6nsbFRxMTCw8M92pMBTpw4QWZmpmiKGBoaoq6uTsbRL8HoWdinTp1i1apV\nLF26FHDHJb/whS/w/PPPi1p1Xx0eotVqmTVrltihVVZWTji3/c033wSgqKhI2O1rtm3bRnFxMQDP\nPfccDz/8ML/73e98bJV7XVVXV4sql0OHDrFu3TpuueUWwB3q+O53vwt8Oqo4JyfHJ3Y2NTWJcEpL\nSwtZWVnigBuXy8W5c+cICQkhMzMT+HScwfWIXwi6sjWKjY1Fo9GI7ZVyDNboA26Hh4cZGBgQAj88\nPExjYyNarRaTyQS4S50uVa8s8aStrY1XX31VDMDKycnhhz/8IXFxcdMu5DqdTnyWGo2G6OhoMRVQ\nOdhgeHhYlFTOmTOHtLQ0IZLBwcEMDg565E3279/vVw9zZaDYfffdR2JiImazedrno7hcLjF9ULk+\nyqyj0NBQHA4HTqdTrKvy8nKamprEzKTU1FQSEhJoaWkRDVujj66bKmw2m+gfsVgsDAwMiN9jMBhI\nT0/HYDCICarNzc309fWJiZwOhwOHw0Fzc7PHAK/rMdwCfiLoyuJraWlh+fLl4jSilpYWamtr6evr\n8xjGdfFi6OnpITw8XAhDSUkJKtWkDsmWjEI5XEI5rMEb13C0ZzUwMIBOpxNx3KKiImpqajh8+LA4\nxWhgYEDsIAB27NhBWFgYVqtVCMNrr73Gxo0b/e6cyfr6eurr64mPj592QXc6neIBp1w7haysLOLj\n4wkKChJrz+l00tPTIxK3S5cuFQ/R1atXA+7pp8pDYapQqVRCwC/uHxgaGuLMmTMEBQWJUc8Gg4G2\ntjYh6ElJSdTV1YkKLXA3H1VXV/vVQ91b+NcdD3z88ceirX/t2rUMDAzQ1NQkEp6dnZ309fWJEjWF\nvLw84Qk1NzfL80X/f1JSUmhra7uiWdYbNmzg7bffZseOHeJ7aWlpIok6lQwMDAghjo6Opry8XBwl\n19DQwL333stNN90kFnt7ezsmk0m8p7q6mpqamjFdwg6Hw+8EXWH0/JnpIjg42EPkRlNVVUVVVRWR\nkZFiN6RWqxkYGBCJZKfTSVRUFBEREaJiZOfOnR7zfaYCvV4vwmkul2vciiabzTZmNLGCkrS/5ZZb\nxA7dZDIJLbje8I9Ao0QikUg+M37pwihNQzU1Nej1eo8SJeWcQYWsrCxmz56NTqejtLQUcMeEr3cP\nXWmDzszMJD8/X5Sb1dfXT5hUVEIde/fu5emnn0an04n5KFFRUdPioXd0dIh4eGJiItHR0eIghnfe\neYdt27Zx2223sWLFCsA9y8dsNotmnWPHjo0b253ucFFqaipGo9FvE3BGo1EM2srMzOSdd94ZE+bp\n6uqacELpyMgI8+bNIzw8XOx+pqP132AwMGPGDADmz5+Py+US8fLa2loOHjx4yd8bFxfH6tWrufXW\nW8XOrru7+7pd/z4XdIPBIA41UGJ+ypZuYGAAvV5PY2OjSNYoKHH2JUuWkJWVxZEjR8TRVdf7yUVq\ntVoskmXLljFv3jyxKOvr66murubMmTOcPHkScCejwsPDxUPg4MGDpKWlkZSUJDrypivJbLfbxec1\n3ud27Ngxjh07JqpWIiMjL9toFBwcLOb6TBf19fX8+7//O5/73OcAOHPmDD/72c+EU3EpQkJCxGyS\n6XwgKJUg99xzD/fdd59ovHvttdeor68fNww3b948AFatWkVCQgI2m000G+n1+ilPNqpUKhEqyc7O\nJikpSYhxVFQUPT09lJaWipCLcpTeunXrAPeh5zabjfPnz4tiCn+YQeQrfC7odrtdxPqioqJwOp0i\nrqfMbI6KihICBe525Pz8fMBdxqjRaDh27JhI6FyvT2cFp9PJmTNnAPe1KioqEsfLORwOOjo6aGxs\nFAsA3MfRKQ/U06dPY7fbaW1t5cMPPwQYk7OYKsxms0iKKg/kif4mmNxpNAsWLPBKQveJJ54QD8ov\nfelLvPLKK9TW1ooH5ccff0xDQ4Owpbm5mby8PIKCgkTJ6HQxPDwsBoOlpaWxYcMGUZL4uc99jpKS\nEqqqqsTJT6GhocTGxoqHQEhICK2trRw8eFCI6XTMQx8eHhYPcqVSTamqUavVZGdnM3v2bHENQ0JC\niIuLE1+fO3eOkpISPv74Y7HbuJ6bCmUMXSKRSAIElTefZCqVatxfpjxtw8LCCA8P96gn12g0DA4O\nitfExsYSGRkpDjxQq9WUlJTw4YcfitjbZHG5XBO6cRPZ6ismsvVydmq1WnJzc8U8jhtvvJF58+YR\nFxcnchMGg4He3l7h1VdUVPDJJ5/w/vvvX3G1wKWu6ZYtW8a1VbkH29vbOXr06FW37CsHTCsjAC7H\n9u3bp+zzX7VqFZs3bxan0IN7DpFWqxVjC5qamti7d69ogLoSLnVdV6xYccl1FRERwdy5c1m0aBHg\nDlOEhYVx4cIFEZ9WhuAp1WTKmiovLxdD3JSd8+U4cODAuLYuWLDgknaazWbi4+NFPXl8fDxhYWFE\nRER4HBLvdDpFz4QSOuzo6BC5lMnG+o8ePXrNr/+L8QtBH41arRbxUrPZjF6vJyIiwqMES2lAALcI\nXO3Rc9eDoF+M0WgkPj6ejIwMsrKyAHe5oNVqFXmKsrIyKisrr6qR5GoEfTROp1M0xHR0dFBXV+dx\nqs54xMbGkpube8UnFk2loI9GiY/PmDEDtVotYrqnTp266nDg1Qj6aDQajchVhYeHk5ycTFJSkkh6\na7VaWltbRZjmzJkzdHV1eTR+TZYrFfSL7VTWv8lkwmg0Eh4eLnI5SnmlUhjR39+P3W7H4XBcsSMg\nBf0zci1dpGvF1mvFTpicoHuT6RL06eCzCro3+SyC7k0CUdBlDF0ikUgCBCnoEolEEiBIQZdIJJIA\nwasxdIlEIpFMH9JDl0gkkgBBCrpEIpEECFLQJRKJJECQgi6RSCQBghR0iUQiCRCkoEskEkmAIAVd\nIpFIAgQp6BKJRBIgSEGXSCSSAEEKukQikQQIUtAlEokkQJCCLpFIJAGCFHSJRCIJEKSgSyQSSYAg\nBV0ikUgCBCnoEolEEiBIQZdIJJIAQQq6RCKRBAhS0CUSiSRAkIIukUgkAYLWm79MpVL51YnULpdL\nNdHPvvrVr/qVrX/+85/HtfVauqbXkq0zZszwK1tramomtHXlypV+Zev+/fvHtfXGG2/0Kzt3794d\nEPfqaLwq6JMlJCQEAIPBQEdHh4+tmZjw8HCMRqP4d3R0NJGRkYSHhwMwNDTEuXPnqKioAGB4eNhn\ntgYKcXFxdHZ2YrfbfW0KAwMDY+7P/Px8CgoKAFCr1bS2ttLc3AzAyMiI121UCA4ORqt1L/eYmBhC\nQkJQqVQ4HA4AWlpasFgsWK1WAJxOp0/sHBgYoK6uTtikoFa7gwmFhYVER0ejUrn1zeXyK931OTLk\nIpFIJAGC33noiYmJ5OTkAHD06FEfWzMxOp2OsLAwysvLAfeuYtGiRSQlJdHb2wtAfHw8qampZGdn\nA1BSUkJ9fb1feJdms5n+/n5fm3HFGAwG5syZQ2trKwBNTU0+scNut4+7eywrK6OmpgaAO++8k5Ur\nV1JfXw9ARUUFbW1twiv2FhqNhtTUVLFzvOmmm7BarSQmJmKz2QCwWq0UFxdz8OBBAPr6+ry+o7DZ\nbNTU1NDW1jbmZ8qO4cSJE6SkpJCWlga47wfppX+K3wl6aGgowcHBwKfbq4iICLEIGhsb2bt3ry9N\nBNzhk/379wtB6ejo4PTp0/zlL38RCyczM5OkpCRWrFgBwLp16zh+/DinTp0SC8kXJCcnc++994qv\nd+3axalTp3xmz8Uo12/t2rUsXryY3bt388EHHwBQW1tLbW0tS5YsASA9PZ1Dhw55XSSV0MR4DA0N\nAfD888+zatUq1qxZA0B0dDRlZWVUVlZ69aGu1Woxm81YLBYAPvroI5YuXYperxcPm+7ububOnSvC\nRW+99Rb19fVefeir1Wqys7OJiIgA3Ndr4cKFVFdXC+fuwoULqFQq8UCPj48nJCQEp9MphR0/FPSO\njg6xIJQbMCEhAYPBALjFKCMjgz/96U8+sxHcsTubzYZOpwMgNjaW+vp62tvbxWtCQkKYP3++iKHf\nfffdzJ07l+HhYc6ePSv+P94gLCwMcC8avV7PqVOnmDFjBgAvv/wyn3zyCQ888IBXbJkIjUbDunXr\nmDdvHuD2gpOSksjOzhb3wscffwzAoUOHAFi+fDlr1qwRgu8tDAYDcXFx4uvs7Gzy8vKIiYnhqaee\nAtxe7kcffSRi6A899BBmsxmr1cr58+e9Zuvw8DDFxcUiN9XY2MjPfvYzwsPDWblyJQCrVq3i3Llz\npKenA3D77beze/duysvLvSbqer2e+fPni4fdjBkzSEhI4PHHH+fdd98F4K9//SsHDhwgKioKgMjI\nSJxOJ3a73S92vr7GLwVdQafTcfToUYxGIzfeeCMAOTk5tLa2iu3gCy+84BM7tVotiYmJIllTUVFB\nV1cXBoNBJD8HBwf56KOPhBcUHBzMpk2bKCoqoru7G/BM/EwnShgI3N7Y8PAwu3btAqCrq4unn35a\nCM9PfvITr9h0MWq1GqfTKXYLXV1dHD16lNzcXB555BEA7r33Xr797W+L93z88cesXr2agoICSktL\nvWarVqslJSUFvV4PuENYwcHB9PT08KMf/QiAU6dO8dprr1FVVQXAc889xw9+8AOWLVsmPg9vJP1V\nKhVNTU00NDR4fL+np4cdO3YAsGPHDr73ve9x+PBh8Z7CwkKsVqsIK053CMbpdNLW1kZsbCzgXj8j\nIyOYTCZuvfVWALKysnj88cfZvXs3ACaTidWrV1NXVyfCMr5K6PoDMikqkUgkAYLfeeijSUhIYGho\niKNHj4q4+X333cfPf/5zUlNTAdi7d69PEmNKqEQpn8rMzGT58uWUlZUJr72trY3Ozk5qa2sBeOml\nl0hPT6egoEDEib3loV/M6Gv2t7/9jcWLFzNr1iwAr3u7CjabjYMHD4qQW2RkJAkJCezYsYOysjIA\nvvjFL/LUU0/xne98R7yvt7eX0NBQQkNDAXeoY7pxOBz09PSIUsC6ujpCQkIwGo0inBISEkJ8fLyI\n9zY0NLBnzx42bNjAyZMnAe946BaLZYx3Ph6///3vRW5Co9Ewa9YsMjIy6OrqApjU/+OzYLVaqamp\nEWtDieH/0z/9k0iCrl+/ngcffFAkTo8fP85NN93E8uXL2b9/P3B9lwf7taAr9aijee6551i4cCEP\nPfQQ4BZ9Xwi6SqVCr9eTkpIivhcUFMT8+fNFgs5isVBeXi5i6CEhIXR1dWG1Wj1CIP5AcnKy2FqX\nlZWxePFiamtrx604mE4UMQd3yKW7uxuXy8WFCxcAqKmpISUlheXLlwNQVVVFenq6V2O9CqPjtmq1\nmhMnTqBWq8Xnr9VqhZgD3HDDDSxevBitVivCCt7AYDCwaNEi8bUS2nI6neLe7Ovrw263izUXHByM\ny+UiIyODoKAgr9ip0WgARIjK4XCg0Wiw2WwUFxcDUFxcTGFhocgHREZGUldXx6pVq0R1UWVlpVfs\n9Uf8WtDHIz8/nz179nD69GlgfNH3FiqVStyE4I7d6XQ6oqOjAfcN2traSnx8PAA333wzMTEx7Ny5\nk8HBQQCRVPU1IyMjYtfjcrk4fPgwc+fO9bqgX4yyE1KqgpqammhqahI5lSeeeIKhoSFOnz7t0yoH\nlUqF3W7H5XLR2dkJuJtkRjM4OMiWLVs4d+6c152Qie4zRej7+vrQ6/VCKLu7u2lrayMuLs7jITvd\nKAKu4HQ6xW4I3BU6KpVKPBCXLVvG+vXrMRqNIkl9PQu6jKFLJBJJgHBNeOgmk4mFCxcC7q3g3//+\ndxEnCwsLY+bMmVitVhGr9hUGg4HExERRDdDc3Ex6ejqFhYWA2/aamhoOHDhAQkICgPCKfYHyuyMj\nI/n973/vEZcGRJjD37jpppv453/+ZwCRY1EqiXzJyMjIuDmRvLw8wN1X0d3djUqlumQduzfQarWE\nhYWRkZEBwIIFCzh69KgIwSQlJXHu3Dnq6upEbkLJF3gTi8VCdXW1qMAC965t7dq1gDunYjabCQoK\nuq6rWxT8XtCDgoLYsmWLqEN/7bXXPJIeWVlZ2O12sc31JVFRUbS3t3PixAnA/bBZsmSJiLNu376d\njo4OIiIiRLmbr1iwYIGIOZ87d45bbrllTNLLV12Yl2Lz5s289dZboo7/ySefZPv27T5t1FIYT8xX\nrFjB/fffD7gdk/LycoqLi0XZqq+Ii4sjOzubuXPnAm5nJDo6msbGRsBdDtrc3ExcXBxms9lndl64\ncMFDzMHdgfuNb3wDcK85m81GV1eXXzzUfY3fC7rZbGbGjBkkJycD0NraKmpnAY4dO0Z4eLhfPJ1P\nnDhBT0+PSISZzWY0Go2oZIiPj2fmzJn09/f7XNBNJhM//vGPAffiLi8v58iRIz616VIkJSUB7maT\nN998kzfffBOA9957j6GhIUwm05iYtT/whS98ga985SuAuxlq//79tLa2+sTbHY3JZCIyMlJU5ISG\nhnLixAneeust4NNOWKVr21fEx8czNDQknA2dTofD4fAYr2G1Wjl06JDP8z3+gN8L+uDgICdPnhRe\n7tKlSz3K6nbs2CESJr7GZrNRXl4udgvnz59n9+7dzJ8/H3B3CsbHx3P+/HmRyVdKwryN0+kUZYp9\nfX3U19fz7LPP+sSWS1FQUMB9990nPuO9e/fy5JNPip/fcMMNmM1m9u/f73NBT0hIGOOl/8d//Ifw\nHNesWUNRUREtLS0+H7VQWlrq0Sj0yiuv4HK5uP322wH3SIWqqiqGhoaEuPuiEzMvL49Vq1aJRGdp\naSl6vV6ssTfeeIOGhgZaWlq8Pv7BH5FJUYlEIgkQ/N5DHxkZYd++fWRmZgKQm5tLXl4eN910k/j5\ne++950sTBVFRUaSlpXnE8+12u9gKPvfcc9x5553MmTNHbGWPHj3qk0aIjz76iH/5l38B3I05Dzzw\ngIip33bbbezbt8/rNo2HVqvF5XKJCZytra3U19eLuOr7779Pfn4+q1evZs+ePQA+i0/HxsaSmZkp\nQmwtLS10dHTwy1/+EnBP27zhhhuIjIwUu6MTJ074ZE76wMDAmLEZWVlZHruc73//+xw6dIiSkhLA\nfe29Hdrs7OwkOztb9J3YbDbOnz8veiaOHz+OXq/3KCF2uVzX7aAuvxd0cIcEXnrpJcBdkaHX68Ww\nptzcXEpKSvziIAy1Wk1ERISI9/f19dHX1yeqb6xWK2+//TZqtVo0JKWlpYmb09v8/e9/F/9ubGzk\ny1/+MgA//elP2bx5s18kmisqKvjzn//M0qVLAbjnnnvYsmWLiP+fO3eOsrIyBgcHhUgePnzYJ9vv\nwcFBDAaDGBy1cOFCZs6cya9+9SsAPvjgA/bv389PfvITkYzs7OwU4TdvoiQ/R1NVVSWqyQYHB9m+\nfTuzZ88W9+rw8LDXH5b19fVERkYKh27evHnk5OSI9X7hwgUcDgerV68WmtDe3u4XSXJfcE0IOiC8\n3Mcee8yjbC0jI4P6+nq2b9/uS/MAd1NEbGysGAfQ2tqKxWIRC7a5uZnm5mbS0tJE2WJycjIVFRU+\nT+rW1tYK0fzDH/7A0qVLeeedd3xqE7jLEisrK0UD2enTp/nSl77EE088AcCjjz5KeXk5tbW1zJw5\nE3CP3/XFw8hut9Pe3i4S3mVlZbhcLm677TbAne/p7e1lx44dfPGLXwRg7ty51NTUeP0BlJOTQ3l5\n+ZgxCS+//DLgroIKDw8nMTERk8kEuO9Vbwt6SEgIpaWlIglaXl7Ohg0buPPOOwF35/D27dspKyvj\n85//PODuJvXXktvpRsbQJRKJJEC4Zjz00bz33nvCYy8uLuaBBx7wCw9dpVKh0+lITEwE3OGh0Z5C\nX18f7e3tHDhwQBx6oVar0Wg0PvfQ4dMZ49XV1X5V0+twOESe4ejRo9TU1LBq1SoA5syZQ0dHBxaL\nRbSD+3K77XQ6Rav8yMgIJSUlIkbe29uLVqtl8eLFIjyQk5ODRqPxuoeu0+koLCwUeZPKykqPFv/q\n6mrUajXJyclilEVsbKzXbVVmJinVQ62trZw+fZpNmzYBMHPmTFJTU6mpqRH18gUFBezbt++6jKNf\nk4IOiGl1L7zwgohZTjdGo1HcNP39/YSFhRETEwO4F299fT3Dw8Mi5GIwGEhOThYx9T179qBSqUhL\nSxNb3cHBQb8bzF9UVCQauZROwurqaq/9fuXEmv7+/nGvTWdnp5i+GRYWRlhYGEVFRWKWx3RNWxwZ\nGREPaJVKRWZmphA7cMdzRyc4HQ4HQ0NDHvkd5e9RYtUNDQ3ifplKtFqtmN+iUqmIiIgQdiiHszid\nTnE/z5s3j46ODiGc8fHxmEwmqqurPQ6cmGosFovo2+js7PTILymHQbtcLo+6/dEltunp6TQ2NpKR\nkSESurNnz+bAgQPXZRzdLwRdOSUlOTmZY8eOTarqY/HixYC7SsBbSaWhoSGRSTebzZjNZpHcSktL\no66ujpKSEpEEHRoaEieqgHuRJSQkkJubKxbx4cOHCQ0NnZZFDZ9O1psMSqz0xIkTrFixgsOHDwsh\nz83N9VryVonTzpw5k97eXrq6usYsztG9B0VFRaxdu3ba47sDAwMeD5jy8nIWLFgAwI033khHRweV\nlZVCoCwWCz09PWPq4+12uzjqraKiYlo8XoPBIM6yValUREdHi51je3s7J0+epLOzUzyAnE4nKSkp\nYi0ODAxgNptpaWkR13q6zkNVejGUz0/Jf4SHh5ORkUFYWJgQdKfTyeDgoJi+eObMGex2OwsWLBCO\nXUREhBhhfb3hF4KuHI+Wnp5Odna2EMRLnR2qhFyU4760Wq340E0m07RUvYw+Os5qtZKamioWuEaj\nYc2aNaxbt04cQzcwMEBzc7MoAVy3bh0ulwuj0SimRVZWVlJUVOQxtXEqKSwsJCkpSXQEKqKsdNyB\nuyzjO8IAAB0KSURBVFN0/vz5YmZHcXGxh+cJTFtnq06nEx75xZ1+ylyRS3HPPfcwd+5crFYrx44d\nmxYbFYxG45gRvcpZlx0dHSxdupT09HRxHaurq8fMF1q2bBmZmZkivNHQ0DAtoYGhoSEx0XPJkiUY\njUYxZ/zGG29k06ZNHD16VNwXfX19REdHi8993759ovVfCb8NDg7icrmm1PkIDw8Xo5A/+ugjj7HS\nPT09omRyIpqbm/nmN7/J0qVLxW55aGjIL0KYvuD6fIxJJBJJAOIXHrri9c6bN4+MjAzhJWRlZdHY\n2EhNTY3Yxg4PD+NyucZ4PosWLRKlbdN1eERQUJCYF11ZWcmJEyd4++23AffkwmXLlrF48WLRBGM2\nm2lqahJNRDNmzKCtrY2PP/5YeGhBQUHTFm4BdxIpNzeXe+65B3DP7Hj11Vf55JNPxGt0Oh1nzpwR\nHvvChQvHXEPlM5pqDAYDy5YtA9xhnVOnTrFz505g4rMhNRoN/+///T8AHn74Yd5991327Nkjzkid\nLsxms/Byz5075/Gz2tray0773Lx5M+vXrycyMlIMcJuu62qz2cTu4dy5cyxcuFDkQ5xOJwUFBXzl\nK18R11ij0WC1WsV7Kioq6O/vp7KyUgxpU6vV4v6fKtRqtZhGqRxUrZw8FBwczNDQ0CVDqnfffTdf\n+9rXaGpqEknxPXv2XLdjAPxC0JVZEc8//zzf/e53xXFTcXFxZGRksGjRIo84ZHNzs5iFYbPZMBgM\nHh/gdM30UKvVYkGnpKR4xGzr6+upr69n27ZtIvQTEhJCcHCwiF3q9XrKy8tRq9UihuoNQd+2bZuI\nLz7zzDO88MILXLhwgffffx+AI0eOMDg4KP42u90+pvt2uroZh4eHRZw+JSWFhx9+mG9+85uAu277\n8OHDtLW1iYdiYWEhmzZtYvXq1QC88847PPvssxQXF097Eszlcok8w9q1a9FoNCKBV1lZyYEDB8a8\nR61WiwOO161bR0xMDB0dHeIw5p6enmkRn4GBATH/ZHh42MO2wsJC5s+fz8yZM0XMPCIiApfLJUIc\n27dvFw8oo9Eo/papZnBwUDhis2bNYv369fzgBz8A3PfuhQsXaGpqEp3BNpuNhIQEEV7Jzs4W963y\n4Dlx4sR1G3JRebO0R6VSXfaXaTQaNm7cCLhLuoaHhxkYGBCLdXBwkIGBASHaPT09hIeH09/fL46g\nmuwJKy6Xa0Il/epXvzrGVpfLJR4+bW1tNDc3izjleJ13E7FixQoRk46IiBAL5lL8+c9/HtfWyVzT\ni1myZAkLFy4U4lRQUEB0dLQ4Sf13v/udKKu7Ui51TSeyVXkARkVFsXTpUjZv3gy4d2jd3d2cPXtW\nJMr1ej12u11Mhnz33Xex2+2EhoYKYVQ+k89i64wZM8a1Vcl1hISEEBoaSn5+PuAeEqbX6ykpKeHM\nmTPApw6A8kAPDg6mqamJwcFBsQOqqKiY1I6ypqZmQltXrlw5xlaLxSJ2EZc6mk+5B5QE6HgoXZox\nMTGTmhK5f//+cW298cYbx9jpcDjE2s7IyGDlypWsXLkScE/YtNvtIhEK7gSvxWIRazwiIoLe3l6a\nm5t59913AfeOZDKVY7t3777ie9VXXOpeHY2MoUskEkmA4Hce+miSkpKYNWsWkZGRwjMeHh5mZGRE\nbKkMBgMdHR2cPXv2is8+vFIPfTQOh4O+vj4R2+/r68NisdDZ2TmhRxQeHk5eXh4hISGismeyMcmp\n9NCnk6vx0Eczun46Ly+P+fPnk5ycLK6TMk5ZCQ2MjIyg1Wrp6uq64kOir8ZDH41OpxPhsoiICBYs\nWEB+fj6RkZGA+x7p7OwUu7euri5hq+I9T3b085V66PBpDqKtrU1Us1wpGRkZIjY92RnuV+Khj8Zq\ntWI0GkXItaCggFmzZokxGTC2DLerq4va2loOHz4sYu2T7esIRA/drwV9NEopWGxsLNHR0WLr29TU\ndNVHz30WQVdQbi6bzcbw8DB9fX0i3qyEhRTblaOyDAbDFZcBXi+CPs570Ol0ogHGYDAQHBwsrp/F\nYqGtre2Kxfxytk5G0C9GKZ1VwhgxMTGEhISIh1FQUBBtbW3U1NRccZ7nagR9NHa7XThFHR0dly2X\n1Ov1pKenEx4efsWHcVytoANjyiJNJhOhoaEiZh4bG4vZbBYhuJaWFpqamujq6rriXEQgCrpfJEUn\ng9L919fX55PpdBOhJIqCg4MJDg4WCRrJ1OByuRgZGfHJiNkrxW63Y7fbRf7BHyaAKozu00hNTfXp\nWbaX4uICASVfdvExdJLxkTF0iUQiCRCkoEskEkmAIAVdIpFIAgSvJkUlEolEMn1ID10ikUgCBCno\nEolEEiBIQZdIJJIAQQq6RCKRBAhS0CUSiSRAkIIukUgkAYIUdIlEIgkQpKBLJBJJgCAFXSKRSAIE\nKegSiUQSIEhBl0gkkgBBCrpEIpEECFLQJRKJJECQgi6RSCQBghR0iUQiCRCkoEskEkmAIAVdIpFI\nAgQp6BKJRBIgSEGXSCSSAEEKukQikQQIWm/+MpVK5VcnUrtcLtVEP7tWbL3lllv8ys5du3Zd89cU\nYOnSpX5l68GDB6/563qt2AnXlq2j8aqgfxYiIyMBiImJob29nZ6eHgBcLr+67oDbRgCVSkVfXx8W\ni8Wn9oyMjDA8PAxAUFAQISEh5OXlkZiYCIDT6aSnp4eKigoABgYGfGbr/9feuQdFdZ5//AMsyy6w\nwC6wLDe53zQxgqaAlyra6NiYNnZqpjNJk0ltbTqpbTqdTCZN/2v9o9OmmeklZmLTcTJNGzNJa4O3\nGRlNE+q1SkYpA3IHERBYhIUFll34/XF+56mXqCRh2XXzfv5SZnEfz3nP9zzvc3vvJTweD0ajEQCv\n14vFYiEzMxOz2QyA2WxmYGCAy5cvA9p9UMwdo9GIx+MJtBmfmrAwTXsDoU0q5KJQKBQhwj3joTud\nTkDzepYtW8bAwAAAbW1tuN3uQJoGQHp6OpmZmXR0dMjPZmdnMRgMxMfHA+B2u5menl5Qu3w+H+3t\n7VgsFgCKi4uZnp4mJyeHc+fOAZCQkEB2djZ2ux2Ajo4OWltbF9zWe4mZmRlmZmbIy8sDtHu7fv16\nsrKy6OnpAeDatWskJCTITqilpYWrV6/i8/kCZnewY7PZKC4ulr+3tbXR19cXQIvmTlVVFUlJSXR3\ndwMwODiIx+Ohq6trwWy4JwQ9OztbLkpPTw9ut5ulS5cCkJmZyenTp0XwF4rw8HDKysoYHh4GYNu2\nbUxPT3Px4kXGx8flc3a7Ha/XC2hbyLCwsAXdRk5PTzM0NMQjjzwCaCLT0dHB4OCghLEmJyfp7OyU\n8EFaWhpJSUmcPXtWhQlug8FgwGKxEBcXB8CSJUvIysrCarWKAJnNZrxer2y9y8rKaG1tpaWlRdaE\n4kYSEhLEsfj3v/8tjluw88ADDzAxMcHs7KyEXB0OB83NzeTm5gKaU6qHiv1F0At6fn4+ZWVlOBwO\nQBOfpqYmLly4AMBDDz3EQw89xKFDh3C5XAtmV2RkJBaLRez48MMPKSsr44UXXpAY6p49e7h06RJL\nliwBNDHt6ekhPDycmZmZBbEzPDyc5cuXywuwrq4OgLNnz9LU1ARAbGwsJSUlIvDh4eE4HA6WLl3K\nf/7zHyA4cxWBRL9/+roEOHbsGCMjI7IjczgcpKamymddLhfFxcVMTU3R3t6+8EbfA4yPj9PW1gZA\nVlbWLYKemJjI0NBQIEz7RHQn6MqVKyxbtoyrV6/S2NgIaHmVpKQkeembTCYMBgODg4N+sycoBb2w\nsBDQkkiPPPII8fHxElbxer2Eh4dLorG+vp6tW7eycuVKjh8/DrAgHvDU1JR8H2g31mKxkJiYKFvG\nl19+mZ07d4oXX1BQgMvlYnR0dMESJ3FxcdhsNt544w0AoqOjuf/++1m6dClFRUUAdHZ2YrFYZCFG\nR0djMpnIz8+XxacE6EYiIiIA+OijjwA4efIk4+PjbN68WZLKemhF99CampqYmJhg8eLF4nz48+G+\nHYWFhTz88MOkpaXx/PPPL/j334nh4WF5Nq4Pteher9FoZO3atfzrX/8KiH03o4fTfD4fDQ0NEm7T\ncTqdxMbGymcdDgcul8tvO1+VFFUoFIoQIeg89ISEBNn6nzp1iurqarZu3cro6CgAXV1ddHR0kJSU\nBMCWLVuIjo6mvLyc+vp6gFvekv7EZDIBWry0urqa+vp68vPzAfj5z3/Orl27eOmllwAt4bNhwwb+\n8Y9/LFgIY2RkhObmZr7yla8AWpLJZDJx7do17rvvPkDzHI4fP84Pf/hDAA4cOMCRI0d49tlnsVqt\ngPLQb2ZqaoqOjg65/0ajEZPJRG9vr3joGRkZjI2NERMTA4DVasVg0B45PSyzkB56QkICoOV1Xnnl\nFfbt28ef/vQnQLvntbW1AdkxXI/H4/nEJKgeelm7di3l5eVShnvmzJkFte9mri+CuB36eujt7SUl\nJQW73S6J0/kmbCFjo3Mt1tfjUnroxGw2yxZXr+3VSU1N5eTJk9TV1fGLX/wCgPPnz8/JnvlsLDAY\nDFL5cD0//vGP5QU1OzvL0NAQr7/++qfecn2exiKPxyNVLpOTkxiNRqanp+nv7wfgwQcfpK6ujk2b\nNgHwrW99i127drFx40ZJNh89enROdn6RGou8Xq+sS5/PR0REBGFhYVy9ehXQrntWVhYrV64EtLW7\natUq3G43+/btA+YmCOD/xqKtW7fy6quvkpqa+nn/Kb82FiUnJ3PixAkJuXz3u9/9zP/WQjQWFRcX\ni/N27do1EhMT6e/v/9R5gHu6sejmGLj+NoZbm156e3txOp1UVVXxxz/+cUHs+yRuV7Xwxhtv8MIL\nLwDw3HPPceTIEX7/+98vpGkYjUZ5gYSFhTE9Pc3s7Kx4l3v37mXdunVs3LgRgP7+ftatW4fT6eTi\nxYsLauu9hO5tX//n2dlZeXlOTExgMplYtGgRACkpKUxNTeFyuQLebHYzY2NjPPHEE7f8vKqq6oZc\nUaBJT08nLCyMrKysQJsyJ9rb23nllVcA7aX/1ltv0dDQ4LfvUzF0hUKhCBGC0kOfC8uWLQMgJiaG\ngwcP8sQTT0iMMFhISEigsrJSvPempiZaWloCbJW2mxgeHubKlSsAFBUVUVFRwZe//GVAK7fs7+8n\nJyfnBi9UcWe8Xq+UqgEkJSWxePFitm3bBmjVRK+99homk0nCisHCzSG1uLg41q9fL2WrgWbt2rUA\nfOlLX+K9995j165dAbZobmzbto1nnnkGgPfff9/vdfX35NMaHx/P5s2bAS0pGRUVxYcffhjwhI6O\nXg741FNPMTo6Kg+Fnti12+0SZw0E/f39tLa2Ul5eDsBjjz3GfffdxzvvvAPAhQsXiIiIYHR01O+N\nEKGEHjPXa9MrKyt5+umnpWx1z549HD16lMrKSinNCyRRUVG35HISExMB2LdvnyTSA8327dspKysD\ntH6PX//61wG2aG5s376d73znO1JQcPLkSVpbW/36nfekoG/atInvfe97ADQ3N1NfX8+ZM2fmnGDy\nF0VFRfh8PhHugwcPMjAwQGVlJQBr1qzh+PHjARVz0JogUlNTeeyxxwCt0uJ3v/sdO3bsAGDz5s20\ntbUxMDBAdHQ0oAZ2zYWEhARMJhNr1qwBtF1kbW0tBw4cALR4akVFBYmJiQFfq/DJw8KeffZZQEuM\nBwtbtmyRiiy9VyKYWbduHaB1D6ekpBAZGQnABx984PfvvucEXW8q2r9/P6BlvRctWkRNTY3fSoHm\nitVqJTU1VTLwPp+Pb3/723KDDx06JGVigSQnJ4eSkhIRlUOHDpGVlSXJr+zsbMrLy2lvbw8K4blX\n8Hq95ObmSiPJwYMHOXHihJR+btiwgby8PBobG6UbMljYsWMHzz33nIQygmW3C3Dp0iV5SRYUFATY\nmruj73KWLVvG+Pg4O3fuBOD06dN+/26VFFUoFIoQ4Z7w0O12u2wPrVYrcXFxNDc3A1rN+fT0NMnJ\nyWRmZgJa8ikQs0dOnTqFw+GQJNjzzz+P0+nkySefBLSa49jYWHw+X0DnPJeVlXHhwgWZf/7ggw8S\nHh4uIwvi4uI4evQoY2NjModmfHxchV3ugtFo5OOPP5Zml5GREVauXMn69esBbf7P+fPnMRgMMqWx\noaEhKAag7dmzh+TkZLH1rbfeCrBF/6Ojo4OXX34Z0HaTwYzVaiU7OxuAv/3tb+zfv18SoUajEZvN\nhsFgkBn5803QC7rRaCQzM1MmGDY2NlJcXCzVFw0NDYyMjFBRUSGZ8P379zMyMhIQe/v6+m6omwek\nDrmxsZH8/HyMRqNUmASCjz76iE2bNkkTSUtLCwaDQR4Wj8eDz+ejqKhIBo0VFhbOuWHri0pXVxcz\nMzOSFDUajYyOjkrnckxMDGazma6uLrn2w8PDAQtr5ebm8o1vfAOA3/zmN0FbObJ7925J0OoVY/ps\nl2Cbxjg8PMzBgwcB6O7uvmHyalhYmAzo0psN53tKbNALusfjoampSQYcFRYWcu7cOWmd7uvrY8uW\nLXi9XlatWgVoA7v0Wd+B4M033wS03cPOnTt58cUXAeQls3z5crnpgYhVpqenU1NTIx750qVLSUtL\no6amBtCSOUNDQxw9epSqqioAVqxYwYULF9TY1ztgs9kYHByUSgaj0cjMzIzMlV+0aBHZ2dmYTCYp\nsc3MzKS7uzsgM9Lb2tokYfv6669z6NAhyU0FG/rajIiIIDc3VyrJIiIi5P8QLOiJW71xT0cfF5Gc\nnCwTGOdb0FUMXaFQKEKEoPfQQSuZ01vQbTYbycnJspUZGxvj7bff5qWXXqKiogLQZn3X1dUt2Mzx\n21FfX8/3v/99mTfx5JNPcuDAAZKSkmREcCA8dIPBQEZGhsxyqa6uJjs7W4aK1dTU8Ne//pW9e/fK\neNhHH32U8HD1/r8TBoMBh8Mhbf3Xrl2jpaVFvLDJyUlSU1OJjIyU1vWRkZGA1qTr3uSOHTtYt24d\nu3fvBrTdxMMPPxwwu26Hz+ejra1Nyhh/9KMfUVtbG5T9Evo60L3x2NhYrly5wuTkpGjTfJ+NEJSC\nrscX3W43o6OjzM7OSpJzaGiI4eHhWy7Cu+++yy9/+UtACw/85S9/WRBB10vUPB7PbROdeqnio48+\nSmxsLN/85jf9Wk/r9Xoljh8TE4PVapXtn81mo7u7+4YpgDExMXR3d0ss1+v10tbWRkxMjAiPCrXc\neA1iY2NFoEFLePb39zM1NSXX2uFwEBcXJ2ITGRnJ5OQkTqdTchOxsbFBc3jIBx98ID0SnzTXJZjQ\nE/obNmzg8ccfD+gcp7uh96WkpaVRWlpKf3+/nMA23xoVlILe29sLQEVFBS6Xi56eHjkQwOfzfeJF\ncLlcMnbz/vvvXzCvR3/7jo+PExMTw8TExG0HL3388cdUVlZSUVEhg/H9wfj4uHiFVqsVt9st3nVB\nQQFFRUW0trbS2dkJaNdO77YFrXM0PT2d6upqSktLAa0Z6Ysu6gaDQZLx+ktSb/PXDy7o7OyUdTgx\nMYHBYJA1Eh0dLZ/XuwevP6IumPjZz352y8+SkpL8sqPUK34KCgo4cuTInH5H3+FOT0/fkHhcaPRc\nntVqvWtye2BggF/96lccOHDAb+ekBqWg65w6dQqz2UxYWNgdk0arV6/G4/HIQ3K9gM0nVquVkpIS\nQEt4Tk5Oivd1p4Oq9cVnsVhYvXo1XV1dfj/4Vt8t6DND9Aexvr6e5ORkioqKJMRy+fJlWltbZZzC\nM888Q3x8PB6PR66jHp75oqNPUszNzcVutxMVFQVoUxatVitpaWnikOhrQ/fYCwoK2LhxI3//+9+l\nazA7O3tBjyS8GzdPAoyNjZU14K/woL5Wc3Jy+MEPfiBhn9thMpnEIdq9ezd79+71i113Iz8/Xxqd\noqKiKCwspK+vTyrYRkZGbjhofceOHXzta1/j3Xff9VvZogqKKhQKRYgQlB66XmOamprK+Pj4HWu2\nc3Nz+epXv8rFixfFM2pubvZLGdjY2Jh4E9u2bcNkMonXMjQ0xNWrV+nr6xNvy2azUVpaKgc0nz9/\nnt7eXt555x2/1sk7HA65hl1dXdhsNvEku7q6GBsbw+l0ypB9r9dLRkaGzHIxGAwcPnwYt9stHkag\nxyoEA9eHXLxeLx6PR9q8U1JS8Hq9TE5OSkmi2WwmJiaG9PR0QCtRbGlp4fDhwzKwy263B2XIBbSd\n7/bt23n66af9+j16eHR0dJSIiAhpzLldCMNut0sZ42uvveZX226HxWLB6/VKKDgqKorMzExSU1Nl\nR66HYVesWAFoObTTp09LU6Q/CApB12OMCQkJdHV1iWiuWrUKn89He3u7NBCMjY3R398v8zGeeuop\nLBaLzMgArcrFH/He6elpmZwYGxvLT3/6U2kQOHfuHP/9739pbGyULXZKSgoRERG8/fbbgLZltdvt\nfj/52+VyiYgUFxfT0NAgdvb29nLp0iUWL14swhMdHc2KFSskUXP48GEKCgowm83SFDM5ORm0wrNQ\n3JwfuXz5ssxkeeCBB0hOTsZsNsvLMyoqCrvdLmGvf/7zn7z55ptcvHhRZpM4nc6A1KDfjRdffJHy\n8nLpevYn+robGRm5oYLtbp8PJPqRg3ro5MyZM1itVnJyciRPkp6ejsPhkDh7Y2Mjx44d49SpU36z\nKyiOoNPjknpFhS7epaWlrFmzBoPBILE9p9NJTEyMjNPMy8vj0qVLDA4OSly6pqZmTjHfz3sEVXl5\nOdu3bwe0WOjg4CAul0teSK2trTeUVH3961+nuLiY999/n+rq6rvaNxdbP+kIOo/HI973kiVLKC0t\nFfGenZ2lp6eHM2fOyEulpKSE2dlZucYlJSV4vV6Sk5Oliqe9vX1OpWGhfASd1+uVa+Z2u7FYLDfs\nJtPT06W1G7SEWVhYGLW1tQDU1tYyMTHB8uXL5YV7+fLlOSX1Ps8RdCtWrOAnP/kJJ06cALhjRYhu\n1/r16zlx4sRnGvf6eY6gy8vLk+vX1dV1S9f1fPJ5n3+HwyFjG/QdF/zPQU1NTSUrK0uSvh0dHRw+\nfHjebb0eFUNXKBSKECEoPHSdyMhI0tPTZcvidrvJyMigsLBQQga6J6QPimpsbJTSRr0JRo+l3435\nPCS2qqqK7OxsIiIiZP7x9PQ0ZrNZYmg+n48///nP4rF9Gj7tIdH6fXU6ndJIBNrM9qKiIjIyMmQn\ndPbsWTo7O8UbNxgMJCUlER4eLh7a9R7InQhlD/3/fwfQQn+Dg4OSC/F4PNjtdrKzs6XGfGJigr6+\nPqlDttlslJSUEB8fL7vJuQ48m49Don/7298C8Pjjj2O327ly5QrHjh0DtGcmLy9Pyl3fe++9OZcQ\n3ow/D4meT+bj+def9duVnxoMhnkJ/87VQw8qQdfRt1yRkZEkJCRgNptFbFJSUpiZmZEHITIyEo/H\nQ2tr67yepP1ZF5/BYJBtuM1mIz09XUIwdXV1nzkZ+mkF/Xp8Pp8kniYmJoiOjsZkMkkeIi8v74a6\neJfLRW9vL21tbZL0mSuhLujXMzMzIwnwsbEx3G43Y2NjEkKJiorCarXKekhOTiYyMhKXy/WpQwnz\nIeg3s3r1ahnOtXr1arq7u/nDH/4A8LkOhv4iCfpCcU8L+kIRCjd0LoK+kHyRBH0h8Yeg+wsl6POP\niqErFArFFwwl6AqFQhEiKEFXKBSKEGFBY+gKhUKh8B/KQ1coFIoQQQm6QqFQhAhK0BUKhSJEUIKu\nUCgUIYISdIVCoQgRlKArFApFiKAEXaFQKEIEJegKhUIRIihBVygUihBBCbpCoVCECErQFQqFIkRQ\ngq5QKBQhghJ0hUKhCBGUoCsUCkWIoARdoVAoQgQl6AqFQhEiKEFXKBSKEEEJukKhUIQIStAVCoUi\nRFCCrlAoFCGCEnSFQqEIEZSgKxQKRYigBF2hUChChP8DI7LfnnrRpZMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4ce4d71790>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for _ in xrange(32):\n",
    "    show_img = result[:,:,:,_]\n",
    "    show_img.shape = [28, 28]\n",
    "    plt.subplot(4, 8, _ + 1)\n",
    "    plt.imshow(show_img, cmap='gray')\n",
    "    plt.axis('off')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "哈哈，成功啦！从上面的结果中，我们可以看到不同的滤波器（卷积核）学习到了不同的特征。比如第一行中，第一个滤波器学习到了边缘信息，第5个卷积核，则学习到了骨干的信息。感觉好有趣，不由自主的想对另一个数字看看。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.  0.  0.  0.  0.  0.  0.  0.  1.  0.]\n",
      " [ 0.  0.  0.  1.  0.  0.  0.  0.  0.  0.]\n",
      " [ 0.  0.  0.  0.  0.  0.  1.  0.  0.  0.]\n",
      " [ 0.  0.  0.  0.  0.  1.  0.  0.  0.  0.]\n",
      " [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  0.]\n",
      " [ 0.  0.  0.  0.  0.  0.  1.  0.  0.  0.]\n",
      " [ 0.  0.  0.  0.  0.  0.  1.  0.  0.  0.]\n",
      " [ 1.  0.  0.  0.  0.  0.  0.  0.  0.  0.]\n",
      " [ 0.  0.  0.  0.  0.  1.  0.  0.  0.  0.]\n",
      " [ 0.  1.  0.  0.  0.  0.  0.  0.  0.  0.]]\n"
     ]
    }
   ],
   "source": [
    "# 输出前10个看看，我选择数字 9 来试试\n",
    "print mnist.train.labels[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4ca5253c90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 首先应该把 img1 转为正确的shape (None, 784)\n",
    "X_img = mnist.train.images[2].reshape([-1, 784])\n",
    "y_img = mnist.train.labels[1].reshape([-1, 10]) # 这个标签只要维度一致就行了\n",
    "result = h_conv1.eval(feed_dict={X_: X_img, y_: y_img, keep_prob: 1.0})\n",
    "\n",
    "for _ in xrange(32):\n",
    "    show_img = result[:,:,:,_]\n",
    "    show_img.shape = [28, 28]\n",
    "    plt.subplot(4, 8, _ + 1)\n",
    "    plt.imshow(show_img, cmap='gray')\n",
    "    plt.axis('off')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一个核还是主要学习到了边缘特征，第五个核还是学到了骨干特征（当然在某种程度上）。好吧，本次就到这啦！"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
